package com.atguigu.srb.core.controller.api;


import com.atguigu.srb.common.result.R;
import com.atguigu.srb.core.entity.vo.UserBindHfbVO;
import com.atguigu.srb.core.service.UserBindService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

/**
 * <p>
 * 用户绑定表 前端控制器
 * </p>
 *
 * @author Atguigu
 * @since 2023-06-30
 */
@RestController
@RequestMapping("/api/core/userBind")
public class ApiUserBindController {
    @Resource
    UserBindService userBindService;
    @PostMapping("auth/bind")
    @ApiOperation("用户提交的绑定账户的请求")
    public R bindAccount(@RequestBody UserBindHfbVO userBindHfbVO,
                         @RequestHeader("token")String token){
        //保存用户的绑定的信息, 并且构建一个可以让用户跳转到hfb绑定账户的页面的响应
        String form = userBindService.bindAccount(token,userBindHfbVO);
        return R.ok().data("form",form);
    }
    @PostMapping("callback")
    @ApiOperation("hfb异步请求通知用户绑定成功的接口")
    public String successBind(/* @RequestParam("map") */ @RequestParam Map<String,Object> map){
        //1.获取参数的方式1 : 使用map集合来获取hfb响应过来的参数
        //2.获取参数的方式2 : 通过请求获取请求参数,通过工具类转换成单vlue的map
        /**
         * Map<String,String[]> map = request.getParameterMap();
         * Map<String,Object> result = RequestHelper.switchMap(map);
         * 为什么通过这种方式,因为有可能,hfb那边传过来的参数存在1个key对应多个value的情况
         * 例如: id=1&id=2&username=zhangsan&password=123    "id",[1,2]    "username","zhangsan
         * 根据hfb的文档,我们已经知道了,传过来的参数是一个key对应一个value,所以我们这里直接使用@RequestParam("map") Map<String,Object> map
         * 的方式来获取参数,比较的简单
         */
        return userBindService.callback(map);
    }
}

